OTP (Open Telecom Platform) - это набор инструментов, библиотек и методологий, предназначенных для разработки масштабируемых, надежных и отказоустойчивых распределенных систем. OTP включает в себя такие компоненты, как Erlang Runtime System, стандартные библиотеки, виртуальную машину, а также принципы проектирования, такие как supervision (надзор), идеи процессов-акторов и многое другое.

Ниже приведено решение задачи 1 в виде OTP-приложения. В этом решении будет создано OTP-приложение с родительским процессом и N дочерними процессами, где родительский процесс будет наблюдать за дочерними и перезапускать их в случае необходимости.

Файл `star.app.src` (описание приложения):

```erlang
{application, star,
 [
  {description, "Star Application"},
  {vsn, "1.0.0"},
  {modules, [star, star_sup, star_worker]},
  {registered, [star_sup]},
  {applications, [kernel, stdlib]},
  {mod, {star, []}},
  {env, []}
 ]}.
```

Файл `star.app` (приложение):

```erlang
% Autogenerated file
{application, star,
 [
  {description, "Star Application"},
  {vsn, "1.0.0"},
  {registered, []},
  {applications,
   [kernel,
    stdlib
   ]},
  {env,[]},
  {modules, []}
 ]}.
```

Файл `star_sup.erl` (supervisor):

```erlang
-module(star_sup).
-behaviour(supervisor).

-export([start_link/0]).
-export([init/1]).

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init([]) ->
    Children = [{star_worker, start_link, []}],
    RestartStrategy = {one_for_one, 5, 10},
    {ok, {RestartStrategy, Children}}.
```

Файл `star_worker.erl` (дочерний процесс):

```erlang
-module(star_worker).
-behaviour(gen_server).

-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

start_link() ->
    gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init([]) ->
    {ok, []}.

handle_call(_Request, _From, State) ->
    Reply = ok,
    {reply, Reply, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.

handle_info({send, Msg}, State) ->
    io:format("~p received ~p from ~p~n", [self(), Msg, ?MODULE]),
    gen_server:cast(?MODULE, {reply, Msg + 1}),
    {noreply, State};

handle_info(stop, _State) ->
    io:format("~p finished~n", [self()]),
    {stop, normal, ok};

handle_info(_Info, State) ->
    {noreply, State}.

terminate(_Reason, _State) ->
    ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.
```

Файл `star.erl` (главный модуль):

```erlang
-module(star).
-export([star/2]).

star(N, M) ->
    supervisor:start_link({local, star_sup}, star_sup, []),
    Parent = self(),
    lists:foreach(fun(_) -> spawn_link(fun() -> start_child(Parent, M) end) end, lists:seq(1, N)).

start_child(Parent, M) ->
    loop(Parent, M).

loop(Parent, 0) ->
    exit(normal);
loop(Parent, M) ->
    Pids = supervisor:which_children(star_sup),
    lists:foreach(fun({_, Pid, _, _}) -> Pid ! {send, 0} end, Pids),
    receive
        {reply, _} -> ok
    end,
    loop(Parent, M - 1).
```

Это простое OTP-приложение, которое создает родительский процесс и N дочерних процессов, каждый из которых выполняет свой цикл работы, отправляя сообщение родительскому процессу. Если M итераций завершены, процессы останавливаются. Родительский процесс создается с использованием `supervisor:start_link`, а дочерние процессы - с помощью `gen_server:start_link`. Супервизор обрабатывает возможные ошибки и перезапускает дочерние процессы при необходимости.